/*
 * 版权所有 (C) 2001-2014 深圳市艾派应用系统有限公司。保留所有权利。
 * 版本：
 * 修改记录：
 *		1、2014-11-25，tfl创建。 
 */
package com.chinamobile.ln.ictenterprises.utils;

import java.util.List;
import java.util.Map;

import com.chinamobile.ln.ictenterprises.model.request.Login;
import com.chinamobile.ln.ictenterprises.model.response.ResponseLogin;
import com.google.gson.Gson;

public class JsonUtil
{
    private static Gson gson = null;

    static
    {
        if (gson == null)
        {
            gson = new Gson();
        }
    }

    private JsonUtil()
    {

    }

    /**
     * 将对象转换成json格式
     * 
     * @param ts
     * @return
     */
    public static String objectToJson(Object ts)
    {
        String jsonStr = null;
        if (gson != null)
        {
            jsonStr = gson.toJson(ts);
        }
        return jsonStr;
    }

    /**
     * 将对象转换成json格式(并自定义日期格式)
     * 
     * @param ts
     * @return
     * 
     *         public static String objectToJsonDateSerializer(Object ts, final
     *         String dateformat) { String jsonStr = null; gson = new
     *         GsonBuilder() .registerTypeHierarchyAdapter(Date.class, new
     *         JsonSerializer<Date>() { public JsonElement serialize(Date src,
     *         Type typeOfSrc, JsonSerializationContext context) {
     *         SimpleDateFormat format = new SimpleDateFormat( dateformat);
     *         return new JsonPrimitive(format.format(src)); }
     *         }).setDateFormat(dateformat).create(); if (gson != null) {
     *         jsonStr = gson.toJson(ts); } return jsonStr; }
     */
    /**
     * 将json格式转换成list对象
     * 
     * @param jsonStr
     * @return
     */
    public static List<?> jsonToList(String jsonStr)
    {
        List<?> objList = null;
        if (gson != null)
        {
            java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<?>>() {}
                .getType();
            objList = gson.fromJson(jsonStr, type);
        }
        return objList;
    }

    /**
     * 将json格式转换成list对象，并准确指定类型
     * @param jsonStr
     * @param type
     * @return
     */
    public static List<?> jsonToList(String jsonStr, java.lang.reflect.Type type)
    {
        List<?> objList = null;
        if (gson != null)
        {
            objList = gson.fromJson(jsonStr, type);
        }
        return objList;
    }

    /**
     * 将json格式转换成map对象
     * 
     * @param jsonStr
     * @return
     */
    public static Map<?, ?> jsonToMap(String jsonStr)
    {
        Map<?, ?> objMap = null;
        if (gson != null)
        {
            java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<Map<?, ?>>() {}
                .getType();
            objMap = gson.fromJson(jsonStr, type);
        }
        return objMap;
    }

    /**
     * 将json转换成bean对象
     * 
     * @param jsonStr
     * @return
     */
    public static Object jsonToBean(String jsonStr, Class<?> cl)
    {
        Object obj = null;
        if (gson != null)
        {
            obj = gson.fromJson(jsonStr, cl);
        }
        return obj;
    }

    /**
     * 将json转换成bean对象
     * 
     * @param jsonStr
     * @param cl
     * @return
     * @SuppressWarnings("unchecked") public static <T> T
     *                                jsonToBeanDateSerializer(String jsonStr,
     *                                Class<T> cl, final String pattern) {
     *                                Object obj = null; gson = new
     *                                GsonBuilder()
     *                                .registerTypeAdapter(Date.class, new
     *                                JsonDeserializer<Date>() { public Date
     *                                deserialize(JsonElement json, Type
     *                                typeOfT, JsonDeserializationContext
     *                                context) throws JsonParseException {
     *                                SimpleDateFormat format = new
     *                                SimpleDateFormat(pattern); String dateStr
     *                                = json.getAsString(); try { return
     *                                format.parse(dateStr); } catch
     *                                (ParseException e) { e.printStackTrace();
     *                                } return null; }
     *                                }).setDateFormat(pattern).create(); if
     *                                (gson != null) { obj =
     *                                gson.fromJson(jsonStr, cl); } return (T)
     *                                obj; }
     */
    /**
     * 根据
     * 
     * @param jsonStr
     * @param key
     * @return
     */
    public static Object getJsonValue(String jsonStr, String key)
    {
        Object rulsObj = null;
        Map<?, ?> rulsMap = jsonToMap(jsonStr);
        if (rulsMap != null && rulsMap.size() > 0)
        {
            rulsObj = rulsMap.get(key);
        }
        return rulsObj;
    }

    public static void main(String[] args)
    {

        Login login = new Login("login", "11", "abc", "123");
        String str = objectToJson(login);
        System.out.println("json:" + str);
        str = "{" + "resultFlag" + ":" + "1" + "," + "results" + ":" + "{"
            + "alias" + ":" + "admin" + "," + "fixedSuffix" + ":" + "1111"
            + "}" + "}";
        System.out.println(str);
        ResponseLogin login2 = (ResponseLogin) jsonToBean(str,
            ResponseLogin.class);
        System.out.println("alias:" + login2.results.alias + "fixedSuffix:"
            + login2.results.smsSign);

    }
}
